package com.hzya.frame.utils.core.dao;

import java.io.Serializable;
import java.util.List;

import com.hzya.frame.utils.core.page.PageInfo;

 public interface IBaseDao<E extends Serializable, PK extends Serializable> {
	
	/**
	 * 查询一个对象
	 * @param paramPK  主键ID
	 * @return
	 */
	 E get(PK paramPK);
	
	/**
	 * 获取所有的结果集
	 * @return
	 */
	 List<E> getAll();
	
	/**
	 * 查询一个对象
	 * @param paramString  mapper ID
	 * @param paramObject  查询条件
	 * @return
	 */
	 Object selectOne(String paramString, Object paramObject);
	
	/**
	 * 查询一个List
	 * @param paramString mapper ID
	 * @param paramObject  查询条件
	 * @return
	 */
	 List<?> selectList(String paramString, Object paramObject);
	
	/**
	 * 逻辑删除 ，sts置为 N
	 * @param paramPK 主键ID
	 * @return
	 */
	 int logicRemove(PK paramPK);
	
	/**
	 * 逻辑删除 ，sts置为 N 
	 * @param paramObject多个条件
	 * @return
	 */
	 int logicRemoveMultiCondition(E o);
	
	/**
	 * 物理删除
	 * @param paramPK 主键ID
	 * @return
	 */
	 int delete(PK paramPK);
	
	/**
	 * 物理删除
	 * @param paramString  sqlMapperID
	 * @param paramObject 条件参数
	 * @return
	 */
	 int delete(String paramString, Object paramObject);
	
	/**
	 *  修改
	 * @param paramString  sqlMapperID
	 * @param paramObject 条件参数
	 * @return
	 */
	 int update(String paramString, Object paramObject);
	
	/**
	 * 条件查询一个对象
	 * @param paramE  条件参数
	 * @return
	 */
	 E queryOne(E paramE);
	
	/**
	 * 插入数据或者修改数据（ID为空是插入，ID不为空是修改）
	 * @param paramE  
	 * @return
	 */
	 E saveOrUpdate(E paramE);
	
	/**
	 * 保存方法
	 * @param paramE
	 * @return
	 */
	 E save(E paramE);
	 /**
	  * 保存方法
	  * @param paramString  id
	  * @param paramE		entitty
	  * @return
	  */
	 E save(String paramString, E paramE);
	
	/**
	 * 修改方法
	 * @param paramE
	 * @return
	 */
	 E update(E paramE);
	
	/**
	 * 查询单个对象
	 * @param paramE  条件参数
	 * @param paramString  mapperID
	 * @return
	 */
	 E query(E paramE, String paramString);
	
	/**
	 * 查询一个List
	 * @param paramE 条件参数
	 * @param paramString msqpperID
	 * @return
	 */
	 List<E> queryList(E paramE, String paramString);
	
	/**
	 * 查询结果集
	 * @param paramE  条件参数
	 * @return
	 */
	 List<E> query(E paramE);
	
	
	/**
	 * wehere条件为 like
	 * @param paramE 条件参数
	 * @return
	 */
	 List<E> queryByLike(E paramE);
	
	/**
	 * where条件为or
	 * @param paramE
	 * @return
	 */
	 List<E> queryByOr(E paramE);
	
	/**
	 * 获取数据条数
	 * @param paramObject  条件参数
	 * @return
	 */
	 Integer getCount(Object paramObject);
	
	/**
	 * 分页查询
	 * @param paramString mapperID
	 * @param paramObject  条件参数
	 * @return
	 */
	 PageInfo<E> queryPaged(String paramString, Object paramObject);
	
	/**
	 * 分页查询
	 * @param paramObject 条件参数
	 * @return
	 */
	 PageInfo<E> queryPaged(Object paramObject);
	
	/**
	 * 判断是否重复
	 * @param paramE  参数条件
	 * @return
	 */
	 boolean checkRepeated(E paramE);
}